<?php
// +-----------------------------------------------------------------------+
// |                                                                       |
// | WebFormsQA     (Question - Answer)                                    |
// | Copyright  (C) 2010                                                   |
// | Official site  www.scale-tech.ru                                      |
// | email          scale-tech@mail.ru                                     |
// | autor          Alexander Demachev                                     |
// |                                                                       |
// | This program is free software; you can redistribute it and/or modify  |
// | it under the terms of the GNU General Public License as published by  |
// | the Free Software Foundation; version 2 of the License.               |
// |                                                                       |
// | This program is distributed in the hope that it will be useful,       |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of        |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         |
// | GNU General Public License for more details.                          |
// +-----------------------------------------------------------------------+

/*!
 * @page ExampleQuestionDatabasePage Исходный код класса ExampleQuestionDatabase
 * @include example_question.class.php
 */

/*! @addtogroup ClassWebFormsQA Основные классы проекта
 *  Группа включает основные классы используемые в проекте WebFormsQA
 *  @{
 */


/**
 * @class ExampleQuestionDatabase
 * @brief Класс заполняет базу данных проекта WebFormsQA тестовыми категориями, содержащими
 *        примеры демонстрационных вопросов с ответами.
 * в процессе установки, пользователю предлагается возможность внести эти данные в базу.
 * категории вопросов следующие:
 * -# Программирование на языке PHP
 * -# 
 * @ref AuthCommonPage
 */
class ExampleQuestionDatabase {


    /**
     * @brief Метод добавляет категорию "Программирование на языке PHP" с вопросами и ответами
     * @param object &$base	- ссылка на объект базы данных QuestionBase		
     */
	static function addCategoryProgrammingPHP( &$base )
	{
		// категория корневая
		$id_parent 		= 0;
		$category 		= "Программирование на языке PHP";
		$id_category 	= $base->addCategory($id_parent, $category);

		//-------------------------------------------------------------------------------------------------------------------		
		$question 	= "Что такое PHP?";
		$email		= "";
		$id 		= 0;
		$base->addQuestion($id_category, $question, $email, $id);

		$answer = "<p> PHP (англ. PHP: Hypertext Preprocessor — «PHP: препроцессор гипертекста»,". 
			"англ. Personal Home Page Tools (устар.) — \n". 
			"«Инструменты для создания персональных веб-страниц») —\n". 
			"скриптовый язык программирования общего назначения, интенсивно применяемый для разработки веб-приложений.\n". 
			"В настоящее время поддерживается подавляющим большинством хостинг-провайдеров и является одним из лидеров\n". 
			"среди языков программирования, применяющихся для создания динамических веб-сайтов. </p>";
		$base->addAnswer($id, $answer);

		//-------------------------------------------------------------------------------------------------------------------
		$question 	= "Кем разрабатывается PHP";
		$base->addQuestion($id_category, $question, $email, $id);

		$answer = "Язык и его интерпретатор разрабатываются группой энтузиастов в рамках проекта с открытым кодом.\n".
			"Проект распространяется под собственной лицензией, несовместимой с GNU GPL";
		$base->addAnswer($id, $answer);
		
		//-------------------------------------------------------------------------------------------------------------------
		$question 	= "Какова область применения PHP?";
		$base->addQuestion($id_category, $question, $email, $id);

		$answer = "PHP применяется для создания WEB сайтов с использованием клиент - серверных технологий.\n".
			"<p>\n".
			"В области программирования для \"Глобальной сети Internet\" -  PHP — один из популярных скриптовых языков (наряду с JSP, Perl и языками,\n". 
			"используемыми в ASP.NET) благодаря своей простоте, \n".
			"скорости выполнения, богатой функциональности,\n". 
			"кроссплатформенности и распространению исходных кодов на основе лицензии PHP.\n".
			"</p>\n".
			"<p>\n".
			"Популярность в области построения веб-сайтов определяется наличием большого набора встроенных средств для разработки веб-приложений. Основные из них:\n".
			"&nbsp;&nbsp;&nbsp;&nbsp;* автоматическое извлечение POST и GET-параметров, а также переменных окружения веб-сервера в предопределённые массивы;<br>\n".
			"&nbsp;&nbsp;&nbsp;&nbsp;* взаимодействие с большим количеством различных систем управления базами данных (MySQL, MySQLi, SQLite, PostgreSQL, Oracle (OCI8), Oracle,<br>\n". 
			"Microsoft SQL Server, Sybase, ODBC, mSQL, IBM DB2, Cloudscape и Apache Derby, Informix, Ovrimos SQL, Lotus Notes, DB++, DBM, dBase, DBX, FrontBase,\n". 
			"FilePro, Ingres II, SESAM, Firebird / InterBase, Paradox File Access, MaxDB, Интерфейс PDO);<br>\n".
			"&nbsp;&nbsp;&nbsp;&nbsp;* автоматизированная отправка HTTP заголовков;<br>\n".
			"&nbsp;&nbsp;&nbsp;&nbsp;* работа с HTTP авторизацией;<br>\n".
			"&nbsp;&nbsp;&nbsp;&nbsp;* работа с cookies и сессиями;<br>\n".
			"&nbsp;&nbsp;&nbsp;&nbsp;* работа с локальными и удалёнными файлами, сокетами.<br>\n".
			"&nbsp;&nbsp;&nbsp;&nbsp;* обработка файлов, загружаемых на сервер;<br>\n".
			"&nbsp;&nbsp;&nbsp;&nbsp;* работа с XForms;<br>\n".
			"</p>\n".
			"<p>\n".
			"В настоящее время PHP используется сотнями тысяч разработчиков. Согласно рейтингу Tiobe, базирующемся на данных поисковых систем, в феврале 2011 года\n". 
			"PHP находится на 5 месте среди языков программирования.  К крупнейшим сайтам, использующим PHP, \n".
			"относятся Facebook, ВКонтакте, Wikipedia и др. \n".
			"</p>\n".
			"<p> Входит в LAMP — распространённый набор программного обеспечения для создания веб-сайтов (Linux, Apache, MySQL, PHP). </p>";
		
		$base->addAnswer($id, $answer);

		//-------------------------------------------------------------------------------------------------------------------
		$question 	= "Как выглядит синтаксис языка PHP?";
		$base->addQuestion($id_category, $question, $email, $id);

		$answer = "Синтаксис PHP подобен синтаксису языка Си. Некоторые элементы, такие как ассоциативные массивы и цикл foreach, заимствованы из Perl.\n".
			"Для работы программы не требуется описывать какие-либо переменные, используемые модули и т. п.\n". 
			"Любая программа может начинаться непосредственно с оператора PHP.\n".
			"Простейшая программа Hello world на PHP выглядит следующим образом:\n".
			"<br>\n".
			"&lt;?php<br>\n".
			"	echo 'Hello, world!';<br>\n". 
			"?&gt;<br>\n".
			"<p>\n". 
			"PHP исполняет код, находящийся внутри ограничителей, таких как &lt;?php ?&gt;.\n". 
			"Всё, что находится вне ограничителей, выводится без изменений. \n".
			"В основном это используется для вставки PHP-кода в HTML-документ, например, так:\n". 
			"</p>\n".
			"<br>".
			"&lt;html&gt;<br>".
			"	&lt;head&gt;<br>\n".
			"	&lt;title&gt;Тестируем PHP&lt;/title&gt;<br>\n".
			"	&lt;/head&gt;<br>\n".
			"	&lt;body&gt;<br>\n".
			"	&lt;?php echo 'Hello, world!'; ?&gt;<br>\n".
			"	&lt;/body&gt;<br>\n".
			"&lt;/html&gt;<br>";

		$base->addAnswer($id, $answer);

		//-------------------------------------------------------------------------------------------------------------------
		$question 	= "Какие типы данных использует PHP?";
		$base->addQuestion($id_category, $question, $email, $id);

		$answer = "<p>PHP является языком программирования с динамической типизацией, не требующим указания типа при объявлении переменных,\n". 
			"равно как и самого объявления переменных, таким образом можно сказать что типы языка PHP являются \"резиновыми\" (принимают любую форму).\n".
			"Преобразования между скалярными типами зачастую осуществляются неявно без дополнительных усилий \n".
			"(впрочем, PHP предоставляет широкие возможности и для явного преобразования типов). </p>\n".
			"К скалярным типам данных относятся:\n".
			"<ul>\n".
			"	<li>целый тип (integer);</li>\n".
			"	<li>вещественный тип данных (float, double);</li>\n".
			"	<li>логический тип (boolean);</li>\n".
			"	<li>строковый тип (string);</li>\n".
			"	<li>специальный тип NULL.</li>\n".
			"</ul>\n".
			"К нескалярным типам относятся:\n".
			"<ul>\n".
			"	<li>«ресурс» (resource);</li>\n".
			"	<li>массив (array);</li>\n".
			"	<li>объект (object);</li>\n".
			"	<li>анонимная функция (closure) или псевдотип callback.</li>\n".
			"</ul>\n".
			"<p> Диапазон целых чисел (integer) в PHP зависит от платформы (обычно, это диапазон 32-битных знаковых целых чисел,\n". 
			"то есть, от ?2 147 483 648 до 2 147 483 647). \n".
			"Числа можно задавать в десятичной, восьмеричной и шестнадцатеричной системах счисления.\n". 
			"Диапазон вещественных чисел (double), также, зависит от платформы \n".
			"(для 32-битной архитектуры диапазон позволяет оперировать числами от ±1.7?10?308 до ±1.7?10+308).\n".
			"</p>\n".
			"<p>\n".
			"PHP предоставляет разработчикам логический тип (boolean), способный принимать только два значения TRUE («истина») и FALSE («ложь»).\n". 
			"При преобразовании в логический тип число 0, пустую строку, ноль в строке «0», NULL и пустой массив считаются равными FALSE. \n".
			"Все остальные значения автоматически преобразуются в TRUE.\n".
			"</p>\n".
			"<p>\n".
			"Специальный тип NULL предназначен для переменных без определённого значения.\n". 
			"Единственным значением данного типа является константа NULL. Тип NULL принимают неинициализированные переменные,\n". 
			"переменные инициализированные константой NULL, а также переменные, удалённые при помощи конструкции unset().\n".
			"</p>\n".
			"<p>\n".
			"Ссылки на внешние ресурсы имеют тип «ресурс» (resource). Переменные данного типа, как правило, представляют собой дескриптор,\n". 
			"позволяющий управлять внешними объектами, такими как файлы, динамические изображения, результирующие таблицы базы данных и т. п.\n".
			"</p>\n".
			"<p>\n".
			"Массивы (array) поддерживают числовые и строковые ключи и являются гетерогенными. Массивы могут содержать значения любых типов,\n". 
			"включая другие массивы. Порядок элементов и их ключей сохраняется. Не совсем корректно называть php-массивы массивами, \n".
			"на самом деле это, скорее всего, упорядоченный хеш. \n".
			"Возможно неожиданное поведение при использование цикла for со счетчиком вместо foreach. Так, например, сортируя массив с численными индексами\n". 
			"функциями из стандартной библиотеки, сортируются и ключи тоже.\n".
			"</p>\n".
			"<p>\n".
			"Указатель на функцию в PHP может быть представлен замыканием или типом callback. Замыкание доступно с версии 5.3 и в коде выглядит как простое\n". 
			"определение функции, в которую явно можно утянуть значения из контекста, например:\n".
			"</p>\n".
			"<p>function(\$args..\$argsN) use(\$ctxVar,\$ctxVar1) { definition ; }</p>\n".
			"<p>callback тип может быть представлен:</p>\n".
			"<ul>\n".
			"	<li>строкой (интерпретируется как название функции);</li>\n".
			"	<li>массивом где нулевой и первый элемент строки (интерпретируется как название статичной функции в классе);</li>\n".
			"	<li>массивом где нулевой элемент объект, а первый строка (интерпретируется как метод у объекта).</li>\n".
			"</ul>\n".
			"<p>Для проверки является ли значение вызываемым следует использовать is_callable($var)</p>";
		
		$base->addAnswer($id, $answer);

		//-------------------------------------------------------------------------------------------------------------------
		$question 	= "Поддерживает ли php обьектно-ориентированное программирование?";
		$base->addQuestion($id_category, $question, $email, $id);

		$answer = "<p>PHP поддерживает широкие объектно-ориентированные возможности, полная поддержка которых была введена в пятой версии языка.\n".
			"Класс в PHP объявляется с помощью ключевого слова class. Методы и поля класса могут быть общедоступными (public, по умолчанию),\n". 
			"защищёнными (protected) и скрытыми (private). PHP поддерживает все три основных механизма ООП — инкапсуляцию, \n".
			"полиморфизм и наследование (родительский класс указывается с помощью ключевого слова extends после имени класса).\n". 
			"Поддерживаются интерфейсы (ставятся в соответствие с помощью implements). \n".
			"Разрешается объявление финальных, абстрактных методов и классов. Множественное наследование классов не поддерживается, \n". 
			"однако класс может реализовывать несколько интерфейсов. Для обращения к методам родительского класса используется ключевое слово parent. \n". 
			"</p>\n".
			"<p>\n".
			"Классы в PHP имеют ряд специальных методов (англ. Magic methods), начинающихся с двух символов подчёркивания.\n". 
			"Особо стоит отметить конструктор (__construct(), в версиях до 5.0 конструктором служил метод, одноимённый с классом)\n". 
			"и деструктор (__destruct()), а также методы чтения (__get()) и записи (__set()), свёртывания (__sleep()) \n".
			"и развёртывания (__wake()), клонирования (__clone()) и др.<br> \n".
			"Эти методы являются достаточно гибким инструментом: переопределяя их, можно добиться существенного изменения поведения объекта.\n". 
			"</p>\n".
			"<p>\n".	
			"Экземпляры класса создаются с помощью ключевого слова new, обращение к полям и методам объекта производится с использованием оператора ->.\n". 
			"Для доступа к членам класса из его методов используется переменная \$this.\n".
			"</p>\n".
			"class C1 extends C2 implements I1, I2<br>\n".
			"{<br>\n".
			"    private \$a;<br>\n".
			"    protected \$b;<br>\n".
			"    function __construct(\$a, \$b)<br>\n".
			"    {<br>\n".
			"	    parent::__construct(\$a, \$b);<br>\n".
			"	    \$this->a = \$a;<br>\n".
			"	    \$this->b = \$b;<br>\n".
			"    }<br>\n".
			" <br>\n".
			"    public function plus()<br>\n".
			"    {<br>\n".
			"	    return \$this->a + \$this->b;<br>\n".
			"    }<br>\n".
			"    /* ...............  */<br>\n".
			"}<br>\n".
			"<p>\n".
			"\$d = new C1(1, 2);<br>\n".
			"echo \$d->plus(); // 3<br>\n".
			"</p>\n".
			"<p> Начиная с пятой версии PHP, объекты передаются по ссылке: </p>\n".
			"class a<br>\n".
			"{<br>\n".
			"	public \$color = \'red\';<br>\n".
			"}<br>\n".
			"<br>\n".
			"\$a = new a();<br>\n".
			"echo \$a -> color; // red<br>\n".
			"\$b = \$a;<br>\n".
			"\$b -> color = \'blue\';<br>\n".
			"echo \$a -> color; // blue<br>";
		
		$base->addAnswer($id, $answer);
		
		//-------------------------------------------------------------------------------------------------------------------		
		$question 	= "Каковы основные преимущества языка PHP?";
		$base->addQuestion($id_category, $question, $email, $id);

		$answer = "<p> Главное преимущество языка PHP перед другими языками, используемых в веб-технологиях - это его простота.\n". 
			"Действительно, PHP достаточно прост для изучения. PHP предоставляет веб-разработчикам возможность быстрого \n".
			"создания динамических веб-страниц и систем различной сложности, ориентированных на решение различных задач. \n".
			"Даже если Вы впервые услышали о PHP, изучить этот язык не составит для Вас большого труда. Не сомневаюсь, \n".
			"что изучив основы PHP в течение нескольких часов, Вы уже сможете создавать простые PHP-скрипты.\n".
			"</p>\n".
			"Практический характер РНР обусловлен пятью важными характеристиками:\n".
			"<ul>\n".
			"	<li>традиционностью;</li>\n".
			"	<li>простотой;</li>\n".
			"	<li>эффективностью;</li>\n".
			"	<li>безопасностью;</li>\n".
			"	<li>гибкостью.</li>\n".
			"</ul>\n".
			"<p>\n".
			"Существует еще одна «характеристика», которая делает РНР особенно привлекательным: он распространяется бесплатно!\n". 
			"Причем, с открытыми исходными кодами ( Open Source ). На PHP написано огоромное колличество сценариев различной \n".
			"сложности и ориентации, которые в основном, также распространяются бесплатно. Языку PHP посвящены огромное число \n".
			"интернет-ресурсов, на нем написаны большинство систем управления контентом (CMS), форумы (таких, например, как phpbb),\n". 
			"системы опросов, рассылки, и.т.п. Профессиональные разработчики все чаще используют PHP для написания сложных систем. \n".
			"И хотя PHP является интерпретируемым языком, он часто используется на веб-узлах с большой нагрузкой \n".
			"(например, www.lycos.com, www.yahoo.com ).\n".
			"</p>\n";
		
		$base->addAnswer($id, $answer);
		
	} // end addCategoryProgrammingPHP
	
    /**
     * @brief Метод добавляет категорию "Системы управления проектами" с вопросами и ответами
     * @param object &$base	- ссылка на объект базы данных QuestionBase		
     */
	static function addCategoryProjectManagementSystem( &$base )
	{
		// категория корневая
		$id_parent 		= 0;
		$category 		= "Системы управления проектами";
		$id_category 	= $base->addCategory($id_parent, $category);

		//-------------------------------------------------------------------------------------------------------------------
		$question 	= "Зачем нужны системы управления проектами?";
		$email		= "";
		$id 		= 0;
		$base->addQuestion($id_category, $question, $email, $id);

		$answer = "<p>\n".
			"В первую очередь система управления обеспечивает возможность\n". 
			"планирования событий, а также:<br>\n".
 		 	"&nbsp;&nbsp;&nbsp;&nbsp;* Планирование расписания работы сотрудников<br>\n".
         	"&nbsp;&nbsp;&nbsp;&nbsp;* Планирование различных событий зависящих друг от друга<br>\n".
    		"&nbsp;&nbsp;&nbsp;&nbsp;* Планирование расписания работы сотрудников и управление ресурсами<br>\n".
    		"&nbsp;&nbsp;&nbsp;&nbsp;* Расчет времени, необходимого на решение каждой из задач<br>\n".
    		"&nbsp;&nbsp;&nbsp;&nbsp;* Сортировка задач в зависимости от сроков их завершения<br>\n".
    		"&nbsp;&nbsp;&nbsp;&nbsp;* Управление нескольким проектами одновременно<br>\n".
		 	"</p>";

		$base->addAnswer($id, $answer);
		
		//-------------------------------------------------------------------------------------------------------------------
		$question 	= "Какую информацию предоставляют системы управления проектами";
		$base->addQuestion($id_category, $question, $email, $id);

		$answer = "ПО для управления проектами предоставляет следующую информацию:<br>\n".
    		"&nbsp;&nbsp;&nbsp;&nbsp;* Список задач для сотрудников и информацию распределения ресурсов<br>\n".
    		"&nbsp;&nbsp;&nbsp;&nbsp;* Обзор информации о сроках выполнения задач<br>\n".
    		"&nbsp;&nbsp;&nbsp;&nbsp;* Ранние предупреждения о возможных рисках, связанных с проектом<br>\n".
    		"&nbsp;&nbsp;&nbsp;&nbsp;* Информации о рабочей нагрузке<br>\n".
    		"&nbsp;&nbsp;&nbsp;&nbsp;* Информация о ходе проекта, показатели и их прогнозирование<br>\n";
		
		$base->addAnswer($id, $answer);
		
		//-------------------------------------------------------------------------------------------------------------------		
		$question 	= "Какие бывают системы для управления проектами";
		$base->addQuestion($id_category, $question, $email, $id);
		$answer = "Системы управления проектами бывают:<br>".
			"<ul>".
			"<li>Десктопные - программное обеспечение находится на рабочем столе каждого пользователя.\n". 
			"	Это предоставляет наиболее гибкий интерфейс. Такие приложения обычно позволяют сохранять\n". 
			"	информацию в файл, который в дальнейшем может быть выложен в общий доступ для других \n".
			"	пользователей или же данные хранятся в центральной базе данных</li>\n".
			"<li>Веб-приложения - программное обеспечение является веб-приложением, доступ к которому осуществляется\n". 
			"	с помощью браузера </li> \n".
			"<li>Персональные - программное обеспечение обычно используется для управлениями домашними проектами.\n". 
			"	Обычно это однопользовательские системы с простым интерфейсом</li> \n".
			"<li>Однопользовательские - однопользовательские системы могут использоваться в качестве\n". 
			"	персональных или для управления небольшими компаниями.</li> \n".
			"<li>Многопользовательские - предназначены для координации действий нескольких десятков\n". 
			"	или сотен пользователей. Обычно строятся по технологии клиент-сервер</li> \n".
 			"</ul>";

		$base->addAnswer($id, $answer);
	}

    /**
     * @brief Метод добавляет категорию "Система Redmine" с вопросами и ответами
     * @param object &$base	- ссылка на объект базы данных QuestionBase		
     */
	static function addCategoryRedmine( &$base )
	{
		// категория будет являться подкатегорией для "Системы управления проектами"
		$id_parent 	= 0;
		$tmp 		= 0;
		$parent 	= "Системы управления проектами";
		$id_parent 	= $base->findCategory($parent, $tmp);
		
		$category 		= "Система Redmine";
		$id_category 	= $base->addCategory($id_parent, $category);
		
		//-------------------------------------------------------------------------------------------------------------------		
		$question 	= "Какова стоимость системы управления проектами Redmine?";
		$email		= "";
		$id 		= 0;
		$base->addQuestion($id_category, $question, $email, $id);

		$answer = "<p>".
			"Redmine — открытое серверное веб-приложение для управления проектами и отслеживания ошибок\n".
			"и распространяется бесплатно. Redmine написан на Ruby и представляет собой приложение на \n".
			"основе широко известного веб-фреймворка Ruby on Rails. \n".
			"Распространяется согласно GNU General Public License. \n".	
		 	"</p>";

		$base->addAnswer($id, $answer);
		
		
		//-------------------------------------------------------------------------------------------------------------------
		$question 	= "Какие возможности предоставляет Redmine?";
		$base->addQuestion($id_category, $question, $email, $id);

		$answer = "<p>".
			"Данный продукт предоставляет следующие возможности:<br>\n".
    		"&nbsp;&nbsp;&nbsp;&nbsp;* ведение нескольких проектов;<br>\n".
    		"&nbsp;&nbsp;&nbsp;&nbsp;* гибкая система доступа, основанная на ролях;<br>\n".
    		"&nbsp;&nbsp;&nbsp;&nbsp;* система отслеживания ошибок;<br>\n".
    		"&nbsp;&nbsp;&nbsp;&nbsp;* диаграммы Ганта и календарь;<br>\n".
    		"&nbsp;&nbsp;&nbsp;&nbsp;* ведение новостей проекта, документов и управление файлами;<br>\n".
    		"&nbsp;&nbsp;&nbsp;&nbsp;* оповещение об изменениях с помощью RSS-потоков и электронной почты;<br>\n".
    		"&nbsp;&nbsp;&nbsp;&nbsp;* вики для каждого проекта;<br>\n".
    		"&nbsp;&nbsp;&nbsp;&nbsp;* форумы для каждого проекта;<br>\n".
    		"&nbsp;&nbsp;&nbsp;&nbsp;* учёт временных затрат;<br>\n".
    		"&nbsp;&nbsp;&nbsp;&nbsp;* настраиваемые произвольные поля для инцидентов, временных затрат, проектов и пользователей;<br>\n".
    		"&nbsp;&nbsp;&nbsp;&nbsp;* лёгкая интеграция с системами управления версиями (SVN, CVS, Git, Mercurial, Bazaar и Darcs);<br>\n".
    		"&nbsp;&nbsp;&nbsp;&nbsp;* создание записей об ошибках на основе полученных писем;<br>\n".
    		"&nbsp;&nbsp;&nbsp;&nbsp;* поддержка множественной аутентификации LDAP;<br>\n".
    		"&nbsp;&nbsp;&nbsp;&nbsp;* возможность самостоятельной регистрации новых пользователей;<br>\n".
    		"&nbsp;&nbsp;&nbsp;&nbsp;* многоязыковой интерфейс (в том числе русский);<br>\n".
    		"&nbsp;&nbsp;&nbsp;&nbsp;* поддержка СУБД MySQL, PostgreSQL, SQLite, Oracle.<br>\n".
		 	"</p>";

		$base->addAnswer($id, $answer);
		
		//-------------------------------------------------------------------------------------------------------------------
		$question 	= "Каковы недостатки Redmine?";
		$base->addQuestion($id_category, $question, $email, $id);

		$answer = "<p>\n".
			"Redmine имеет следующие недостатки:<br>\n".
		    "&nbsp;&nbsp;&nbsp;&nbsp;* Управление файлами и документами в Redmine сводится к их добавлению, удалению и редактированию. Правами доступа ни к файлам, ни к отдельным документам управлять нельзя.<br>\n".
    		"&nbsp;&nbsp;&nbsp;&nbsp;* Отсутствуют оповещения об изменении документов.<br>\n".
    		"&nbsp;&nbsp;&nbsp;&nbsp;* В Redmine нельзя управлять правами доступа на уровне отдельных полей задачи. Например, на данный момент от клиентов нельзя скрыть оценки времени работы над проектом или информацию о потраченном времени.<br>\n".
    		"&nbsp;&nbsp;&nbsp;&nbsp;* В Redmine можно управлять правами доступа на уровне проектов, но нельзя назначить права на какую-то версию проекта или отдельную задачу. Это значит, что если пользователю нужен доступ всего к одной задаче, то придется давать доступ ко всему проекту.<br>\n".
    		"&nbsp;&nbsp;&nbsp;&nbsp;* Если пользователь Redmine получил доступ к проекту, то сейчас нельзя ограничить его активность какими-то отдельными типами задач (трекерами). Например, нельзя разрешить просматривать только «свои» задачи (это часто бывает нужно для организации техподдержки) или разрешить создавать задачи только какого-то определенного типа.<br>\n".
    		"&nbsp;&nbsp;&nbsp;&nbsp;* В Redmine все дополнительные поля доступны всем пользователям, все участники проекта смогут их видеть и изменять. Это ограничение может привести к сложностям при наличии неоднородной команды, когда доступ к проекту имеют и менеджеры, и разработчики, и клиенты.<br>\n".
	 	    "&nbsp;&nbsp;&nbsp;&nbsp;* В Redmine нет прав на отдельные типы переходов в workflow. Например, сейчас нельзя указать, что когда кто-то заканчивает исправлять ошибку, он должен выбрать ответственным тестировщика и должен указать номер билда. Также нельзя скрыть внутреннюю переписку между программистами от клиента.<br>\n".
	 		"</p>";

		$base->addAnswer($id, $answer);
		
		
	}
	
    /**
     * @brief Метод добавляет категорию "Система Trac" с вопросами и ответами
     * @param object &$base	- ссылка на объект базы данных QuestionBase		
     */
	static function addCategoryTrac( &$base )
	{
		// категория будет являться подкатегорией для "Системы управления проектами"
		$id_parent 	= 0;
		$tmp 		= 0;
		$parent 	= "Системы управления проектами";
		$id_parent 	= $base->findCategory($parent, $tmp);
		
		$category 	= "Система Trac";
		$email		= "";
		$id 		= 0;
		$id_category 	= $base->addCategory($id_parent, $category);

		//-------------------------------------------------------------------------------------------------------------------		
		$question 	= "На каком языке программирования написан Trac?";
		$base->addQuestion($id_category, $question, $email, $id);

		$answer = "<p>\n".
			"Trac написан на языке программирования Python и в настоящее время распространяется\n". 
			"по модифицированной лицензии BSD.</p>\n";	

		$base->addAnswer($id, $answer);
		
		//-------------------------------------------------------------------------------------------------------------------
		$question 	= "Какие базы данных поддерживает Trac?";
		$base->addQuestion($id_category, $question, $email, $id);

		$answer = "<p>Trac поддерживаются базы данных SQLite, PostgreSQL, MySQL и MariaDB\n</p>";		
		$base->addAnswer($id, $answer);
	}
	
    /**
     * @brief Метод добавляет демонстрационные категории с вопросами и ответами:
     * -# Системы управления проектами; 
     *  -# Система Redmine, вопросы
     *   -# Какова стоимость системы управления проектами Redmine?;
     *   -# Какие возможности предоставляет Redmine?;
     *   -# Каковы недостатки Redmine?.
     *  -# Система Trac, вопросы:
     *   -# На каком языке программирования написан Trac?
     *   -# Какие базы данных поддерживает Trac?  
     * -# Программирование на языке PHP, вопросы:
     *   -# Что такое PHP?;
     *   -# Кем разрабатывается PHP;
     *   -# Какова область применения PHP?;
     *   -# Как выглядит синтаксис языка PHP?;
     *   -# Какие типы данных использует PHP?;
     *   -# Поддерживает ли php обьектно-ориентированное программирование?;
     *   -# Каковы основные преимущества языка PHP?.
     *
     * @param object &$base	- ссылка на объект базы данных QuestionBase		
     */
	static function addDemonstrationCategories( &$base )
	{
		ExampleQuestionDatabase::addCategoryProjectManagementSystem( $base );
		ExampleQuestionDatabase::addCategoryRedmine( $base );
		ExampleQuestionDatabase::addCategoryTrac( $base );
		
		ExampleQuestionDatabase::addCategoryProgrammingPHP( $base );
	}

	
    
} // end class ExampleQuestionDatabase

/*! @} */

?>
